package com.lanyou.cook.repository;

import java.util.List;

import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.Repository;
import org.springframework.data.rest.core.annotation.RestResource;

import com.lanyou.cook.entity.domain.InterfaceVersionHistory;

public interface InterfaceVersionHistoryRepository extends Repository<InterfaceVersionHistory, String>, JpaSpecificationExecutor<InterfaceVersionHistory> {

	@RestResource(exported = true)
	@RequiresPermissions(value={"interfaceVersionHistoryQuery:view","fieldInterfaceHistoryInfoQuery:view"},logical=Logical.OR)
	InterfaceVersionHistory findOne(String id);	// could expose REST API
	
	InterfaceVersionHistory getOne(String id);
	
	// 以下三个接口只能选一个暴露为REST API
	 
	@RestResource(exported = false)
	List<InterfaceVersionHistory> findAll();	// could expose REST API
	
	@RestResource(exported = false)
	List<InterfaceVersionHistory> findAll(Sort sort);	// could expose REST API
	
	@RestResource(exported = true)
	@RequiresPermissions(value={"interfaceVersionHistoryQuery:view","fieldInterfaceHistoryInfoQuery:view"},logical=Logical.OR)
	Page<InterfaceVersionHistory> findAll(Pageable pageable);	// could expose REST API
	
	List<InterfaceVersionHistory> findAll(Iterable<String> ids);
	
	void flush();
	
	@RestResource(exported = true)
	@RequiresPermissions(value={"fieldManagement:maintain"})
	<S extends InterfaceVersionHistory> S save(S entity);	// could expose REST API
	
	<S extends InterfaceVersionHistory> List<S> save(Iterable<S> entities);
	
}